CSSã¢ãŒã·ã§ã³ãã¶ã€ã³ã®åãè§£ãæŸã¡ãäžçäžã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãé«ããé åçã§æ¯ãä»ããããã¢ãã¡ãŒã·ã§ã³ã·ãŒã±ã³ã¹ãäœæããŸãããã圱é¿åã®ãããŠã§ãã¢ãã¡ãŒã·ã§ã³ã®ããã®äž»èŠãªæŠå¿µãé«åºŠãªãã¯ããã¯ãããã³ãã¹ããã©ã¯ãã£ã¹ãæ¢ããŸãã
CSSã¢ãŒã·ã§ã³ãã¶ã€ã³ïŒã°ããŒãã«ãŠã§ãã®ããã®æ¯ãä»ããããã¢ãã¡ãŒã·ã§ã³ã·ãŒã±ã³ã¹
仿¥ã®èŠèŠäž»å°åã®ããžã¿ã«ç°å¢ã§ã¯ãéçãªã€ã³ã¿ãŒãã§ãŒã¹ã ãã§ã¯ãã¯ãäžååã§ãããŠãŒã¶ãŒã¯ããã€ãããã¯ã§é åçããã€çŽæçãªäœéšãæåŸ ããŠããŸããCSSã¢ãŒã·ã§ã³ãã¶ã€ã³ã¯ããããå®çŸããããã®åŒ·åã§ã¢ã¯ã»ã¹ããããããŒã«ããããæäŸããéçºè ãšãã¶ã€ããŒããŠãŒã¶ãŒãèªå°ããæ å ±ãäŒããææ ãåèµ·ããæŽç·Žãããæ¯ãä»ããããã¢ãã¡ãŒã·ã§ã³ã·ãŒã±ã³ã¹ãäœæããããšãå¯èœã«ããŸãããã®èšäºã§ã¯ããããã®ã·ãŒã±ã³ã¹ãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«äœæããæè¡ãšç§åŠã«ã€ããŠæ·±ãæãäžããããªãã®ãŠã§ããã¬ãŒã³ã¹ãäžçäžã§é åçãã€ãŠãŒã¶ãŒãã¬ã³ããªãŒã§ããããšãä¿èšŒããŸãã
æ¯ãä»ããããã¢ãã¡ãŒã·ã§ã³ã·ãŒã±ã³ã¹ã®æ¬è³ª
æ¯ãä»ããããã¢ãã¡ãŒã·ã§ã³ã·ãŒã±ã³ã¹ã¯ãåã«ç©ãåããããšã ãã§ã¯ãããŸãããç©èªãèªãããŠãŒã¶ãŒã®æ ãå°ãããŸãã¯ã€ã³ã¿ãŒãã§ãŒã¹ã®èªèãããæ©èœãåäžãããããã«ãäžé£ã®ã¢ãã¡ãŒã·ã§ã³ããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããããšã§ãããŠã§ãèŠçŽ ã®ããã®ãã¬ãšã®ããã«èããŠãã ãããããããã®åããæå³çã§ãã¿ã€ãã³ã°ãèšãããŠããããã倧ãããŸãšãŸãã®ããäœéšã«è²¢ç®ããŸããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ãšã£ãŠãããã¯æåçãªãã¥ã¢ã³ã¹ãèšèªã®å£ãè¶ ããŠãæ®éçã«çè§£ãããé«ãè©äŸ¡ãããã¢ãã¡ãŒã·ã§ã³ãäœæããããšãæå³ããŸãã
广çãªæ¯ãä»ãã·ãŒã±ã³ã¹ãæ¯ããäž»èŠãªååã«ã¯ã次ã®ãã®ããããŸãã
- ã¿ã€ãã³ã°ãšã€ãŒãžã³ã°ïŒã¢ãã¡ãŒã·ã§ã³ã®é床ãšå é床ã¯ããã®æèŠã«å€§ãã圱é¿ããŸããæ»ããã§èªç¶ãªã€ãŒãžã³ã°é¢æ°ïŒease-in-outãªã©ïŒã¯ããããã§ãã·ã§ãã«ã§å¿«é©ãªäœéšã®ããã«äžå¯æ¬ ã§ãã
- ã·ãŒã±ã³ã·ã£ã«ãªæµãïŒã¢ãã¡ãŒã·ã§ã³ã¯è«ççã«ãäžã€ãã€ããŸãã¯é©åãªå Žåã¯äžŠè¡ããŠå±éãããç§©åºãšäºæž¬å¯èœæ§ã®æèŠãçã¿åºãå¿ èŠããããŸãã
- æå³çãªåãïŒãã¹ãŠã®ã¢ãã¡ãŒã·ã§ã³ã«ã¯çç±ãå¿ èŠã§ããæ³šæãåŒããç¶æ ã®å€åã瀺ãããã£ãŒãããã¯ãæäŸãã䜿ãããããåäžãããããã§ããæ°ãæ£ãããããæ··ä¹±ããããããäžå¿ èŠãªã¢ãŒã·ã§ã³ã¯é¿ããŠãã ããã
- äžè²«æ§ïŒãŠã§ããµã€ããŸãã¯ã¢ããªã±ãŒã·ã§ã³å šäœã§äžè²«ããã¢ãã¡ãŒã·ã§ã³ã¹ã¿ã€ã«ãšãªãºã ãç¶æãã匷åãªãã©ã³ãã¢ã€ãã³ãã£ãã£ãæ§ç¯ããçµ±äžããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã確ä¿ããŸãã
- ã¬ã¹ãã³ã·ãæ§ïŒã¢ãã¡ãŒã·ã§ã³ã¯ãããŸããŸãªç»é¢ãµã€ãºãããã€ã¹ã«é©åã«é©å¿ããäžçäžã§æé©ãªããã©ãŒãã³ã¹ãšèŠèŠçé åã確ä¿ããå¿ èŠããããŸãã
æŽç·Žãããã¢ãã¡ãŒã·ã§ã³ã®ããã®CSSã®æŽ»çš
CSSã¯ãã¢ãã¡ãŒã·ã§ã³ã®ããžã§ã³ãå®çŸããããã®åŒ·åãªããããã£ãšé¢æ°ã®ã»ãããæäŸããŸããJavaScriptã¯ããè€éãªå¶åŸ¡ãæäŸã§ããŸãããCSSã¯å¹ åºãã¢ãã¡ãŒã·ã§ã³ã®ããŒãºã«å¯Ÿå¿ããããã®ããã©ãŒãã³ã¹ãé«ã宣èšçãªæ¹æ³ãæäŸããäžçäžã®ããã³ããšã³ãéçºè ã«ãšã£ãŠäžå¯æ¬ ãªããŒã«ãšãªã£ãŠããŸãã
1. CSSãã©ã³ãžã·ã§ã³ïŒã¢ãŒã·ã§ã³ã®ãã«ãã£ã³ã°ãããã¯
CSSãã©ã³ãžã·ã§ã³ã¯ãåçŽãªç¶æ å€åã«æé©ã§ããããããã£ã倿ŽããããšãïŒäŸïŒãããŒæããã©ãŒã«ã¹æãã¯ã©ã¹å€æŽæïŒã«ãæå®ãããæéã«ããã£ãŠãã®å€æŽãã¹ã ãŒãºã«ã¢ãã¡ãŒã·ã§ã³åããŸãããã¿ã³ã®ãããŒãã¡ãã¥ãŒã®è¡šç€ºããã©ãŒã ãã£ãŒã«ãã®ãã©ãŒã«ã¹ç¶æ ãªã©ã®åŸ®åŠãªå¹æã«åªããŠããŸãã
äž»èŠãªããããã£ïŒ
transition-property: ãã©ã³ãžã·ã§ã³ãé©çšãããCSSããããã£ãæå®ããŸããtransition-duration: ãã©ã³ãžã·ã§ã³ãå®äºãããŸã§ã®æéãèšå®ããŸããtransition-timing-function: ãã©ã³ãžã·ã§ã³ã®é床æ²ç·ïŒäŸïŒeaseãlinearãease-in-outïŒãå®çŸ©ããŸããtransition-delay: ãã©ã³ãžã·ã§ã³ãéå§ãããŸã§ã®é å»¶ãæå®ããŸãã
äŸïŒã«ãŒãã®ã¹ã±ãŒã«ãšã·ã£ããŠããããŒæã«ã¢ãã¡ãŒã·ã§ã³åããã
.card {
transform: scale(1);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
transition: transform 0.3s ease-in-out, box-shadow 0.3s ease-in-out;
}
.card:hover {
transform: scale(1.05);
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);
}
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ãšã£ãŠããhoverãã®ãããªç¶æ ã衚ãèšè¿°çãªçšèªã¯æ®éçã«çè§£ãããŸããéèŠãªã®ã¯ãã€ã³ã¿ã©ã¯ãã£ããªãŠã§ãæ £ç¿ã«å¯ŸãããŠãŒã¶ãŒã®ç¿ç床ã«é¢ããããèŠèŠçãªãã£ãŒãããã¯ãæç¢ºãã€å³åº§ã§ããããšãä¿èšŒããããšã§ãã
2. CSSããŒãã¬ãŒã ïŒè€éãªã·ãŒã±ã³ã¹ã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³
è€æ°ã®ã¹ããŒãžãè€éãªã¿ã€ãã³ã°ãæ¹å倿Žãªã©ãã¢ãã¡ãŒã·ã§ã³ã®é²è¡ããã现ããå¶åŸ¡ããå¿
èŠãããå ŽåãCSSããŒãã¬ãŒã ïŒ@keyframesã«ãŒã«ãšanimationããããã£ã䜿çšïŒããã®çãã§ããããã«çã®æ¯ãä»ããé¢ãã£ãŠããŸãã
@keyframes ã«ãŒã«ïŒã¢ãã¡ãŒã·ã§ã³ã®ã¹ããŒãžãå®çŸ©ããŸããããŒã»ã³ããŒãžïŒ0%ãã100%ïŒãŸãã¯fromïŒ0%ïŒãtoïŒ100%ïŒã®ãããªããŒã¯ãŒãã䜿çšããŠãã¢ãã¡ãŒã·ã§ã³ã®ç°ãªããã€ã³ãã§ã¹ã¿ã€ã«ãæå®ã§ããŸãã
animation ããããã£ïŒããã¯ãã¢ãã¡ãŒã·ã§ã³é¢é£ã®ããã€ãã®ããããã£ã®ã·ã§ãŒããã³ãã§ãã
animation-name:@keyframesã«ãŒã«ã«ãªã³ã¯ããŸããanimation-duration: ã¢ãã¡ãŒã·ã§ã³ã®é·ããèšå®ããŸããanimation-timing-function: é床æ²ç·ãå¶åŸ¡ããŸããanimation-delay: ã¢ãã¡ãŒã·ã§ã³ãéå§ãããŸã§ã®é å»¶ãèšå®ããŸããanimation-iteration-count: ã¢ãã¡ãŒã·ã§ã³ãåçãããåæ°ãæ±ºå®ããŸãïŒäŸïŒ1ãinfiniteïŒãanimation-direction: ã¢ãã¡ãŒã·ã§ã³ãé æ¹åãéæ¹åããŸãã¯äº€äºã«åçãããããæå®ããŸãïŒäŸïŒnormalãalternateãreverseïŒãanimation-fill-mode: ã¢ãã¡ãŒã·ã§ã³ã®ååŸã«é©çšãããã¹ã¿ã€ã«ãå®çŸ©ããŸãïŒäŸïŒforwardsãbackwardsãbothïŒãanimation-play-state: ã¢ãã¡ãŒã·ã§ã³ã®äžæåæ¢ãšåéãå¯èœã«ããŸãïŒäŸïŒrunningãpausedïŒã
äŸïŒãã«ãã¹ããŒãžã®ããŒãã£ã³ã°ã¢ãã¡ãŒã·ã§ã³ã·ãŒã±ã³ã¹ã
@keyframes loading-dots {
0%, 20% {
transform: translateY(0) scale(1);
opacity: 1;
}
40% {
transform: translateY(-15px) scale(1.1);
opacity: 0.7;
}
60% {
transform: translateY(0) scale(1);
opacity: 1;
}
80%, 100% {
transform: translateY(0) scale(1);
opacity: 0.5;
}
}
.loader-dot {
display: inline-block;
width: 10px;
height: 10px;
background-color: #3498db;
border-radius: 50%;
margin: 0 5px;
animation: loading-dots 1.4s infinite ease-in-out;
}
.loader-dot:nth-child(2) {
animation-delay: 0.2s;
}
.loader-dot:nth-child(3) {
animation-delay: 0.4s;
}
ãã®äŸã§ã¯ã3ã€ã®ç¹ãé£ç¶ããŠã¢ãã¡ãŒã·ã§ã³åãããŸããåŸç¶ã®ç¹ã«animation-delayã䜿çšããããšã§ããããããæ¯ãä»ã广ãçãŸããŸããåœéçãªãŠãŒã¶ãŒã«ãšã£ãŠãããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã®ãããªèŠèŠçãªåå³ã¯äžå¯æ¬ ã§ãããããããã¹ã ãŒãºã§éªéã«ãªããªãããšã確èªããããšã¯ãè¯ã第äžå°è±¡ã®ããã«éåžžã«éèŠã§ãã
æ¯ãä»ããããã·ãŒã±ã³ã¹ã®äœæïŒã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã®ããã®ãã¹ããã©ã¯ãã£ã¹
äžçäžã§å ±æãåŒã¶å¹æçãªã¢ãã¡ãŒã·ã§ã³ã·ãŒã±ã³ã¹ãäœæããã«ã¯ãææ ®æ·±ãã¢ãããŒããå¿ èŠã§ãã以äžã«äž»èŠãªèæ ®äºé ã瀺ããŸãã
1. èŠæ ãããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåªå ãã
èŠèŠçã«é åçã§ãã£ãŠããã¢ãã¡ãŒã·ã§ã³ã¯ãŠãŒã¶ããªãã£ã劚ããŠã¯ãªããŸãããã¢ãã¡ãŒã·ã§ã³ã以äžã§ããããšã確èªããŠãã ããã
- ååãªéãïŒãŠãŒã¶ãŒã¯ãã£ãã¡ã§ããé·ãããã¢ãã¡ãŒã·ã§ã³ã¯ã€ã©ã€ã©ãããããšããããŸããã»ãšãã©ã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã§ã¯ãéåžž0.2ç§ãã0.8ç§ã®éã®æç¶æéãç®æšã«ããŠãã ããã
- éªéã«ãªããªãïŒã³ã³ãã³ããé ããããäºæããåãããããŠãŒã¶ãŒããã®æ£ç¢ºãªã¿ã€ãã³ã°ãå¿ èŠãšããã¢ãã¡ãŒã·ã§ã³ã¯é¿ããŠãã ããã
- ã¢ã¯ã»ã·ãã«ïŒã¢ãŒã·ã§ã³ã«ææãªãŠãŒã¶ãŒã®ããã«ãã¢ãŒã·ã§ã³ãæžãããªãã·ã§ã³ãæäŸããŸãïŒäŸïŒ
prefers-reduced-motionã¡ãã£ã¢ã¯ãšãªã䜿çšïŒãããã¯ãäžçäžã®å€æ§ãªãŠãŒã¶ãŒããŒãºã«ãããã€ã³ã¯ã«ãŒã·ããã£ã®ããã«éåžžã«éèŠã§ãã
prefers-reduced-motion ã®äŸïŒ
/* Default animation */
.element-to-animate {
animation: subtle-fadeIn 1s ease-in-out;
}
/* Reduce motion for users who prefer it */
@media (prefers-reduced-motion: reduce) {
.element-to-animate {
animation: none;
opacity: 1;
}
}
2. ã¢ãã¡ãŒã·ã§ã³ã§ç©èªãèªã
ã¢ãã¡ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒã®èŠç·ãèªå°ããè€éãªããã»ã¹ã説æãããã£ãŒãããã¯ãæäŸã§ããŸãããã©ãã£ããªæµãã«ã€ããŠèããŠã¿ãŸãããã
- ãªã³ããŒãã£ã³ã°ïŒãµã€ã³ã¢ããããã»ã¹ã®ã¹ããããã¢ãã¡ãŒã·ã§ã³åããŠãããé åçã§åãããããæããããŸãã
- ããŒã¿ããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³ïŒãã£ãŒãã®é·ç§»ãæŽæ°ãã¢ãã¡ãŒã·ã§ã³åããŠã倿Žãæç¢ºã«åŒ·èª¿ããŸãã
- ãã£ãŒãããã¯ã«ãŒãïŒæåããéä¿¡åŸã®ãã§ãã¯ããŒã¯ã¢ãã¡ãŒã·ã§ã³ã®ããã«ã埮åŠãªã¢ãã¡ãŒã·ã§ã³ã䜿çšããŠã¢ã¯ã·ã§ã³ã確èªããŸãã
äŸïŒå€æ®µéãã©ãŒã ã®ã¢ãã¡ãŒã·ã§ã³åããã鲿ã€ã³ãžã±ãŒã¿ãŒã
ããã€ãã®ã¹ãããããããã©ãŒã ãæ³åããŠã¿ãŠãã ããããŠãŒã¶ãŒãåã¹ããããå®äºãããšã鲿ã€ã³ãžã±ãŒã¿ãŒãã¹ã ãŒãºã«æ¬¡ã®ã¹ããŒãžã«ã¢ãã¡ãŒã·ã§ã³åãããŸããããã«ãããæç¢ºãªèŠèŠçãã£ãŒãããã¯ãæäŸãããæåŸ å€ã管çãããŸãã
@keyframes progress-fill {
from { width: 0%; }
to { width: 100%; }
}
.progress-bar-fill {
height: 5px;
background-color: #2ecc71;
animation: progress-fill 0.5s forwards;
width: 0%; /* Initial state */
}
/* When step 1 is complete, target the fill for step 2 */
.step-1-complete .progress-bar-fill {
width: 33.3%; /* Or animate to the exact point */
animation-name: progress-fill;
animation-duration: 0.5s;
animation-timing-function: ease-out;
animation-fill-mode: forwards;
}
ãã®çš®ã®ã¢ãã¡ãŒã·ã§ã³ã¯ãé²æç¶æ³ãšããŠæ®éçã«çè§£ãããŠããããŠãŒã¶ãŒãèŠæ £ããªãã€ã³ã¿ãŒãã§ãŒã¹ã§ã¿ã¹ã¯ãå®äºããŠããå¯èœæ§ã®ããã°ããŒãã«ãªeã³ããŒã¹ãŸãã¯ãµãŒãã¹ãã©ãããã©ãŒã ã§ç¹ã«åœ¹ç«ã¡ãŸãã
3. ã¿ã€ãã³ã°ãšã€ãŒãžã³ã°é¢æ°ãç¿åŸãã
ã¿ã€ãã³ã°é¢æ°ã®éžæã¯ãã¢ãã¡ãŒã·ã§ã³ãã©ã®ããã«ç¥èŠããããã«æ·±ã圱é¿ããŸããease-in-outã¯ãã°ãã°å®å
šãªéžæè¢ã§ãããä»ã®é¢æ°ã詊ãããšã§ãŠããŒã¯ãªçµæãåŸãããŸãã
ease: ãã£ããå§ãŸããå éããæåŸã«æžéããŸããlinear: å šäœã«ããã£ãŠäžå®ã®é床ãã¹ã¯ããŒã«å¹æã®ããã«æ£ç¢ºãªã¿ã€ãã³ã°ãå¿ èŠãªã¢ãã¡ãŒã·ã§ã³ã«é©ããŠããŸããease-in: ãã£ããå§ãŸããå éããŸããease-out: éãå§ãŸããæžéããŸããease-in-out: ãã£ããå§ãŸããå éããåã³æžéããŸããæãèªç¶ã«æããããããšãå€ãã§ããcubic-bezier(n,n,n,n): ã«ã¹ã¿ã ã®æ£ç¢ºãªã¿ã€ãã³ã°ã«ãŒããå¯èœã«ããŸãã
äŸïŒã«ã¹ã¿ã ã®cubic-bezierã䜿çšãããããŠã³ã¹ã广ã
@keyframes bounce {
0%, 20%, 50%, 80%, 100% {
transform: translateY(0);
}
40% {
transform: translateY(-30px);
}
60% {
transform: translateY(-15px);
}
}
.bouncing-element {
animation: bounce 1s infinite;
}
/* A smoother bounce using cubic-bezier */
.smoother-bounce {
animation: bounce 1s cubic-bezier(.215,.61,.355,1) infinite;
}
äžççã«èŠããšãåªããããŠã³ã¹ã¯ãäžå¿«æãäžããããšãªãã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ã瀺ãããšãã§ããŸããéèŠãªã®ã¯ç¹çްãã§ãã
4. é åçãªãã€ã¯ãã€ã³ã¿ã©ã¯ã·ã§ã³ãäœæãã
ãã€ã¯ãã€ã³ã¿ã©ã¯ã·ã§ã³ã¯ããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãåäžããããå°ããããã°ãã°ç®ã«èŠããªãã¢ãã¡ãŒã·ã§ã³ã§ãããããã¯ãã£ãŒãããã¯ãæäŸããããã¢ã¯ã·ã§ã³ã確èªãããããããã¯åã«ãšã¯ã¹ããªãšã³ã¹ãããæ¥œãããã®ã«ãããããŸãã
- ãã¿ã³ã®ã¯ãªãã¯ïŒã¯ãªãã¯æã«ããããªçž®å°ãè²ã®å€åã
- ããŒãã£ã³ã°ç¶æ ïŒåŸ®åŠãªã¹ãããŒãã¹ã±ã«ãã³ã¹ã¯ãªãŒã³ã
- ãšã©ãŒã¡ãã»ãŒãžïŒç¡å¹ãªå ¥åã«å¯Ÿããåªããæºãã¢ãã¡ãŒã·ã§ã³ã
äŸïŒã¢ãã¡ãŒã·ã§ã³åããããã§ãã¯ããã¯ã¹ã
ãŠãŒã¶ãŒããã§ãã¯ããã¯ã¹ããªã³ã«ãããšãå¿å°ããã¢ãã¡ãŒã·ã§ã³ãšãšãã«ãã§ãã¯ããŒã¯ã«å€åããŸãã
/* Base styles for the checkbox */
.custom-checkbox {
position: relative;
display: inline-block;
width: 20px;
height: 20px;
border: 2px solid #ccc;
border-radius: 4px;
cursor: pointer;
transition: all 0.3s ease-in-out;
}
/* Style for the checkmark using ::after pseudo-element */
.custom-checkbox::after {
content: '';
position: absolute;
left: 6px;
top: 2px;
width: 5px;
height: 10px;
border: solid white;
border-width: 0 2px 2px 0;
transform: rotate(45deg) scale(0);
opacity: 0;
transition: all 0.3s ease-in-out;
}
/* Checked state */
.custom-checkbox.checked {
background-color: #2ecc71;
border-color: #2ecc71;
}
.custom-checkbox.checked::after {
transform: rotate(45deg) scale(1);
opacity: 1;
}
ãã®å°ããªã¢ãã¡ãŒã·ã§ã³ã¯ãå³åº§ã«è¯å®çãªãã£ãŒãããã¯ãæäŸããåããŠããªãã®ãµã€ããé²èЧããäžçäžã®ãŠãŒã¶ãŒã«ãšã£ãŠäŸ¡å€ããããŸãã
5. JavaScriptã«ããé£ç¶ã¢ãã¡ãŒã·ã§ã³
CSSã¯åŒ·åã§ãããè€éã§çžäºäŸåçãªã¢ãã¡ãŒã·ã§ã³ããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããã«ã¯ããã°ãã°JavaScriptãå¿ èŠã§ããGSAPïŒGreenSock Animation PlatformïŒã®ãããªã©ã€ãã©ãªã¯ã髿§èœã§è€éãªã¢ãã¡ãŒã·ã§ã³ãäœæããããã®æ¥çæšæºã§ããããããJavaScriptã§ã¯ã©ã¹ãæŠç¥çã«é©çšãããã¹ã¿ã€ã«ãæäœãããããããšã§ãCSSã䜿çšããŠå€ãã®é£ç¶çãªå¹æãå®çŸã§ããŸãã
äŸïŒãªã¹ãã¢ã€ãã ã®ãããããã§ãŒãã€ã³ã
åãªã¹ãã¢ã€ãã ãåã®ã¢ã€ãã ã®åŸã«ãã§ãŒãã€ã³ãããããªãããã广ãå®çŸããã«ã¯ïŒ
const listItems = document.querySelectorAll('.animated-list li');
listItems.forEach((item, index) => {
item.style.opacity = '0';
item.style.transform = 'translateY(20px)';
item.style.transition = 'opacity 0.5s ease-out, transform 0.5s ease-out';
setTimeout(() => {
item.style.opacity = '1';
item.style.transform = 'translateY(0)';
}, index * 100); // Stagger by 100ms per item
});
ãã®JavaScriptã®ã¢ãããŒãã¯ãCSSãã©ã³ãžã·ã§ã³ãšé
å»¶ãããã°ã©ã ã§é©çšããŸããsetTimeout颿°ã¯ãèšç®ãããé
å»¶ã®åŸã«ãã©ã³ãžã·ã§ã³ãããªã¬ãŒããããã«äœ¿çšãããæ¯ãä»ããããã·ãŒã±ã³ã¹ãäœæããŸãããã®ãã¿ãŒã³ã¯ãæ
å ±ã®æç¢ºãªé£ç¶çãªè¡šç€ºãæäŸãããããã°ããŒãã«ã«å¹æçã§ãã
é«åºŠãªãã¯ããã¯ãšèæ ®äºé
1. ã¹ã¯ããŒã«æã®ã¢ãã¡ãŒã·ã§ã³
ãŠãŒã¶ãŒãããŒãžãã¹ã¯ããŒã«ããã«ã€ããŠã¢ãã¡ãŒã·ã§ã³ãããªã¬ãŒããããšã¯ããšã³ã²ãŒãžã¡ã³ããå€§å¹ ã«åäžãããããšãã§ããŸããããã«ã¯ãã°ãã°ãã¹ã¯ããŒã«äœçœ®ãæ€åºããCSSã¯ã©ã¹ãé©çšããããçŽæ¥ã¹ã¿ã€ã«ãæäœãããããããã®JavaScriptãé¢äžããŸãã
- Intersection Observer API: èŠçŽ ããã¥ãŒããŒãã«å ¥ã£ãããšããã髿§èœã«æ€åºããçŸä»£çãªJavaScript APIã
- Debouncing/Throttling: ã¹ã¯ããŒã«ã€ãã³ããåŠçããéã®ããã©ãŒãã³ã¹ã«äžå¯æ¬ ã§ãã
äŸïŒã»ã¯ã·ã§ã³ããã¥ãŒããŒãã«å ¥ããšãã®ãã§ãŒãã€ã³å¹æã
/* Base style: hidden */
.section-to-animate {
opacity: 0;
transform: translateY(50px);
transition: opacity 0.8s ease-out, transform 0.8s ease-out;
}
/* Style when visible */
.section-to-animate.is-visible {
opacity: 1;
transform: translateY(0);
}
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('is-visible');
observer.unobserve(entry.target); // Stop observing once visible
}
});
}, {
threshold: 0.1 // Trigger when 10% of the element is visible
});
document.querySelectorAll('.section-to-animate').forEach(section => {
observer.observe(section);
});
ããã¯ããã€ãããã¯ã§é åçãªé·æã³ã³ãã³ããäœæããããã«äžçäžã§åºã䜿çšãããŠããææ³ã§ããããŠãŒã¶ãŒãæ å ±ãã¹ã¯ããŒã«ããéã«èå³ãæã¡ç¶ããããšãä¿èšŒããŸãã
2. SVGã¢ãã¡ãŒã·ã§ã³
ã¹ã±ãŒã©ãã«ãã¯ã¿ãŒã°ã©ãã£ãã¯ã¹ïŒSVGïŒã¯ãæ¬è³ªçã«ã¢ãã¡ãŒã·ã§ã³ã«é©ããŠããŸããCSSã䜿çšããŠSVGãã¹ã倿ãããã³å±æ§ãã¢ãã¡ãŒã·ã§ã³åã§ããŸãã
- ãã¹ã¢ãã¡ãŒã·ã§ã³ïŒ
stroke-dasharrayããã³stroke-dashoffsetããããã£ãã¢ãã¡ãŒã·ã§ã³åããŠSVGãã¹ãæç»ããŸãã - 倿ïŒSVGèŠçŽ ãåè»¢ãæ¡å€§çž®å°ããŸãã¯å¹³è¡ç§»åããŸãã
äŸïŒåçŽãªSVGããŽã®è¡šç€ºãã¢ãã¡ãŒã·ã§ã³åããã
#logo-path {
stroke-dasharray: 161; /* Length of the path */
stroke-dashoffset: 161; /* Initially hide the path */
animation: draw-logo 2s ease-out forwards;
}
@keyframes draw-logo {
to {
stroke-dashoffset: 0;
}
}
SVGã¢ãã¡ãŒã·ã§ã³ã¯ãããŽãã¢ã€ã³ã³ãã€ã©ã¹ãã«åªããŠããŸãããã®ã¹ã±ãŒã©ããªãã£ãšé®®æãã«ãããäžçäžã®ãã¹ãŠã®ããã€ã¹ã«çæ³çã§ãããæç»ã广ã¯èŠèŠçã«çŽæçã§ããã衚瀺ãŸãã¯äœæããã»ã¹ãšããŠæ®éçã«çè§£ãããŠããŸãã
3. ããã©ãŒãã³ã¹æé©å
ã¢ãã¡ãŒã·ã§ã³ã¯è¯ããããå ããŸãããç¹ã«äœæ§èœãªããã€ã¹ãäœéãªã€ã³ã¿ãŒãããæ¥ç¶ã䜿çšããŠãããŠãŒã¶ãŒã«ãšã£ãŠãããã©ãŒãã³ã¹ã¯éèŠã§ããäžççã«èŠãŠããããã¯å€§ããªæžå¿µäºé ã§ãã
- TransformãšOpacityã®ã¢ãã¡ãŒã·ã§ã³åïŒãããã®ããããã£ã¯ãã©ãŠã¶ã®ã³ã³ããžã¿ã¬ã€ã€ãŒã«ãã£ãŠåŠçããã
widthãheightãmarginã®ãããªããããã£ãã¢ãã¡ãŒã·ã§ã³åãããããäžè¬çã«ããã©ãŒãã³ã¹ãé«ãã§ãã - ã¬ã€ã€ãŒåæã®åæžïŒæ°ããã¹ã¿ããã³ã°ã³ã³ããã¹ããäœæããããããã£ïŒ
transformãopacityãfilterãªã©ïŒãé床ã«äœ¿çšãããšãããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸããããããæ éã«äœ¿çšããŠãã ããã will-changeã®æ§ãããªäœ¿çšïŒwill-changeCSSããããã£ã¯ãä»åŸã®ã¢ãã¡ãŒã·ã§ã³ã«ã€ããŠãã©ãŠã¶ã«ãã³ããäžããããã©ãŒãã³ã¹ãåäžãããå¯èœæ§ããããŸãããã ããé床ãªäœ¿çšã¯ããã©ãŒãã³ã¹ãäœäžãããå¯èœæ§ããããŸãã- ããã€ã¹ãšãããã¯ãŒã¯å šäœã§ã®ãã¹ãïŒã¢ãã¡ãŒã·ã§ã³ãããŸããŸãªããã€ã¹ããããã¯ãŒã¯æ¡ä»¶äžã§é©åã«åäœããããšã確èªããŠãã ããã
çµè«ïŒã¢ãŒã·ã§ã³ã§ã°ããŒãã«ãŠã§ããçãçããšããã
CSSã¢ãŒã·ã§ã³ãã¶ã€ã³ã¯ããŠã§ãäžã§é åçã§ãŠãŒã¶ãŒãã¬ã³ããªãŒããããŠèšæ¶ã«æ®ãäœéšãäœæããããã®åŒ·åã§å€çšéãªæ¹æ³ãæäŸããŸããCSSãã©ã³ãžã·ã§ã³ãšããŒãã¬ãŒã ãç¿åŸããã¢ãã¡ãŒã·ã§ã³ã®ååãçè§£ãã倿§ãªã°ããŒãã«ãªãŒãã£ãšã³ã¹ã®ããŒãºãèæ ®ããããšã§ãããžã¿ã«ãã¬ãŒã³ã¹ãçã«åäžãããæŽç·Žãããæ¯ãä»ãã¢ãã¡ãŒã·ã§ã³ã·ãŒã±ã³ã¹ãäœæã§ããŸãã
次ã®ããšãèŠããŠãããŠãã ããã
- ç®çã«çŠç¹ãåœãŠãïŒãã¹ãŠã®ã¢ãã¡ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒäžå¿ã®ç®æšãæããã¹ãã§ãã
- ããã©ãŒãã³ã¹ãšã¢ã¯ã»ã·ããªãã£ãåªå ããïŒã¢ãã¡ãŒã·ã§ã³ãæ»ããã§é«éã§ããããŠãŒã¶ãŒã®å¥œã¿ãå°éããŠããããšã確èªããŠãã ããã
- ç¹çްããåãå ¥ããïŒå€ãã®å Žåãå°ãªãæ¹ããã广çã§ããé åçãªãã€ã¯ãã€ã³ã¿ã©ã¯ã·ã§ã³ã¯ãé床ã«è€éãªã·ãŒã±ã³ã¹ããã圱é¿åãããå ŽåããããŸãã
- ã°ããŒãã«ã«ãã¹ãããïŒããŸããŸãªããã€ã¹ããã©ãŠã¶ããããã¯ãŒã¯æ¡ä»¶ã§ã¢ãã¡ãŒã·ã§ã³ãæ€èšŒãããã¹ãŠã®ãŠãŒã¶ãŒã«äžè²«ãããšã¯ã¹ããªãšã³ã¹ãä¿èšŒããŠãã ããã
ãããã®ååãé©çšããããšã§ãCSSã¢ãŒã·ã§ã³ãã¶ã€ã³ã®åãæŽ»çšããçŸããã ãã§ãªããäžçäžã®ãŠãŒã¶ãŒã«çŽæçã«çè§£ãããæ¥œããŸãããŠã§ãäœéšãäœæã§ããŸãã